package com.gitee.qdbp.general.system.api.personnel.service;

import java.util.List;
import com.gitee.qdbp.able.exception.ServiceException;
import com.gitee.qdbp.base.system.model.IAccount;
import com.gitee.qdbp.general.system.api.personnel.model.AccountBean;
import com.gitee.qdbp.general.system.api.personnel.model.UserCoreBean;
import com.gitee.qdbp.general.system.api.personnel.model.UserCoreUpdate;
import com.gitee.qdbp.general.system.api.personnel.model.UserCoreWhere;

/**
 * 用户基础信息业务接口
 *
 * @author zhh
 * @version 170214
 */
public interface IUserCoreExecutor {

    void create(UserCoreBean model, List<String> roleIds, IAccount me) throws ServiceException;

    /** 修改用户信息 **/
    void update(UserCoreUpdate model, IAccount me) throws ServiceException;

    /** 修改用户信息, roleIds=null不修改角色,roleIds.size=0则清空所有角色 **/
    void update(UserCoreUpdate model, List<String> roleIds, IAccount me) throws ServiceException;

    void delete(String id, IAccount me) throws ServiceException;

    void delete(List<String> ids, IAccount me) throws ServiceException;

    void delete(UserCoreWhere where, IAccount me) throws ServiceException;

    /** 给用户分配角色, roleIds.size=0则清空所有角色 **/
    void distributeRoles(String userId, List<String> roleIds, IAccount me) throws ServiceException;

    /** 检查手机号码，如果已经存在则报错 (userId新增时为空，修改时填被修改人的userId) **/
    void checkPhoneThrowOnAlreadyExists(AccountBean model, String userId) throws ServiceException;

    /** 检查邮箱地址，如果已经存在则报错 (userId新增时为空，修改时填被修改人的userId) **/
    void checkEmailThrowOnAlreadyExists(AccountBean model, String userId) throws ServiceException;

    /** 检查用户工号，如果已经存在则报错 (userId新增时为空，修改时填被修改人的userId) **/
    void checkUserCodeThrowOnAlreadyExists(AccountBean model, String userId) throws ServiceException;

    /** 检查用户登录名，如果已经存在则报错 (userId新增时为空，修改时填被修改人的userId) **/
    void checkUserNameThrowOnAlreadyExists(AccountBean model, String userId) throws ServiceException;

    /** 根据ID查找用户，如果用户不存在则报错 **/
    UserCoreBean findByIdThrowOnNotExists(String id) throws ServiceException;

    /** 根据手机号码查找用户，如果用户不存在则报错 **/
    UserCoreBean findByPhoneThrowOnNotExists(AccountBean model) throws ServiceException;

    /** 根据邮箱地址查找用户，如果用户不存在则报错 **/
    UserCoreBean findByEmailThrowOnNotExists(AccountBean model) throws ServiceException;

    /** 根据用户工号查找用户，如果用户不存在则报错 **/
    UserCoreBean findByUserCodeThrowOnNotExists(AccountBean model) throws ServiceException;

    /** 根据用户登录名查找用户，如果用户不存在则报错 **/
    UserCoreBean findByUserNameThrowOnNotExists(AccountBean model) throws ServiceException;
}
